#ifndef __PIPERECVBUFF_HEADER
#define __PIPERECVBUFF_HEADER

#include "buff.h"
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

/*
 从管道中读取字节流，分为两个步骤
 1.读取长度，以'|'终止；计算剩余长度
 2.读取剩余字节
 status=0,还没读取完长度
 status=1,读取完长度,还没读取剩余字节
 status=2,读取完剩余字节
 */

struct PipeRecvBuff: public Buff {
	static const size_t MAX_LENGTH_BUFF_SIZE;
	static const size_t MAX_DATA_BUFF_SIZE;

	char *length_buff;
	char *data_buff;

	size_t data_length;
	int block_count;
	int status;
	int index;
	int remain;
	
	PipeRecvBuff();
	~PipeRecvBuff();

	/* 返回-1出错，检查errno，返回0管道对端关闭 */
	ssize_t recv_length(int fd);
	ssize_t recv_data(int fd);

	void get_length();
	
	bool finish_length();
	bool finish_data();
	void reset();
};

#endif // __PIPERECVBUFF_HEADER
